package com.wangjie.assistant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;

import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;

@AiService(
        wiringMode = EXPLICIT,
        chatModel = "qwenChatModel",
        chatMemoryProvider = "chatMemoryProvider",
        tools = "calculatorTools"
)
public interface IsolateChatAssiatant {
    /**
     * 隔离式会话
     *
     * @param memoryId    会话id
     * @param userMessage 用户消息
     * @return
     */
    String chat1(@MemoryId int memoryId, @UserMessage String userMessage);

    /**
     * SystemMessage 系统消息提示词
     * 1.SystemMessage的内容会转换为SystemMessage对象, 并与UserMessage一起发送给大语言模型, SystemMessage的内容只会发送给大模型一次, 如果修改了SystemMessage的内容, 新的SystemMessage会被发送给大模型, 之前的聊天记忆会失效
     * 2.如果要显示今天的日期, 我们需要在提示词中添加当前日期的占位符 {{current_date}}
     */
    @SystemMessage(fromResource = "my-prompt-template.txt")
    // @SystemMessage("你是我的好朋友, 请用东北话回答问题, 今天是{{current_date}}")
    // @SystemMessage("你是我的好朋友, 请用东北话回答问题")
    String chat2(@MemoryId int memoryId, @UserMessage String userMessage);

    @UserMessage("你是我的好朋友, 请用粤语回答问题。{{message}}")
    String chat3(@MemoryId int memoryId, @V("message") String userMessage);

    @SystemMessage(fromResource = "my-prompt-template-ext.txt")
    String chat4(
            @MemoryId int memoryId,
            @UserMessage String userMessage,
            @V("userName") String userName,
            @V("userAge") Integer userAge
    );
}
